<?php
defined('EXEC') or die();
$transacao = 'usuario_manter';
$modulo = Session::get('cd_modulo');

if(!$auth->isRead($transacao)){
	Util::info(Config::AUTH_MESSAGE);
	return true;
}

//Alteração ou inclusão de um registro
if(isset($_GET['db']) && isset($_GET['form'])){
	$nm_usuario = addslashes(strtoupper($_POST['nm_usuario']));
	$nm_login = addslashes(strtoupper($_POST['nm_login']));
	$nm_cpf = addslashes($_POST['nm_cpf']);
	$nm_cpf = preg_replace("/[^0-9]/", "", $nm_cpf);
	$ds_email = addslashes($_POST['ds_email']);
	$dt_nascimento = $_POST['dt_nascimento'];
	$parts = explode('/', $dt_nascimento);
	$dt_nascimento = $parts[2].$parts[1].$parts[0];
	$fl_sexo = $_POST['fl_sexo'];
	$grupos = $_POST['cd_grupo_select'];

	//Gerando senha aleatória
	$senha = $auth->senhaAleatoria();

	//Validando para que não haja cpfs, emails ou logins duplicados
	$queryTestLogin = query("select ci_usuario from tethys.tb_usuario where nm_login = '$nm_login' and ci_usuario != ".$_GET['form']);
	$queryTestEmail = query("select ci_usuario from tethys.tb_usuario where ds_email = '$ds_email' and ci_usuario != ".$_GET['form']);
	$queryTestCPF = query("select ci_usuario from tethys.tb_usuario where nm_cpf = '$nm_cpf' and ci_usuario != ".$_GET['form']);

	if($queryTestLogin->rowCount() > 0){
		$rowEdit = $_POST;
		Util::alert('Já existe um usuário com este Login: '.$nm_login.' !');
	}
	elseif($queryTestEmail->rowCount() > 0){
		$rowEdit = $_POST;
		Util::alert('Já existe um usuário com este Email: '.$ds_email.' !');
	}
	elseif($queryTestCPF->rowCount() > 0){
		$rowEdit = $_POST;
		Util::alert('Já existe um usuário com este CPF: '.mask($nm_cpf, '###.###.###-##').' !');
	}
	else{
		$ci_usuario = $_GET['form'];
		if($_GET['form'] == 0){ //cadastro
			$rowId = query("select nextval('tethys.tb_usuario_ci_usuario_seq') as num")->fetch();
			$ci_usuario = $rowId['num'];
			$sql = "INSERT INTO tethys.tb_usuario(
				ci_usuario, nm_usuario, nm_login, nm_senha, ds_email, nm_cpf, dt_nascimento, fl_sexo, fl_atualizousenha)
			VALUES ($ci_usuario, '$nm_usuario', '$nm_login', md5('$senha'), '$ds_email', '$nm_cpf', '$dt_nascimento', '$fl_sexo', 'N')";
		}
		elseif($_GET['form'] > 0){ //alteração
			$sql = "UPDATE tethys.tb_usuario
			   SET nm_usuario='$nm_usuario', nm_login='$nm_login', 
				   ds_email='$ds_email', nm_cpf='$nm_cpf', dt_nascimento='$dt_nascimento', fl_sexo='$fl_sexo'
			 WHERE ci_usuario=".$ci_usuario;		
		}

		if(execute($sql)){
			//Removendo todos os grupos do usuario deste módulo
			execute('delete from tethys.tb_usuariogrupos
						where ci_usuariogrupo in(
						select ci_usuariogrupo from tethys.tb_usuariogrupos tug
						inner join tethys.tb_grupo tg on(tug.cd_grupo = tg.ci_grupo)
						where tg.cd_modulo = '.$modulo.' and tug.cd_usuario = '.$ci_usuario.')');
				
			//Adicionando os grupos do usuario deste módulo
			$sqlGrupos = '';
			for ($i=0;$i<count($grupos);$i++){
				$sqlGrupos .= 'insert into tethys.tb_usuariogrupos (cd_usuario, cd_grupo) values('.$ci_usuario.', '.$grupos[$i].'); ';
			}
			if($sqlGrupos != '')
			execute($sqlGrupos);

			if($_GET['form'] == 0){
				$auth->emailSenha($nm_login, $senha, $ds_email);
				Controller::setInfo('Um email foi enviado para este usuário', 'Salvo com sucesso!');
			}
			else{
				Controller::setInfo('Usuários', 'Salvo com sucesso!');
			}
			Controller::redirect(Util::setLink(array('form=null', 'db=null')));
		}
		else{
			Util::notice('Usuários', 'Ocorreu um erro!', 'error');
		}
	}
}
if(isset($_GET['form'])){ //Formulário para adição ou alteração de registro
	if($_GET['form'] == 0){
		if(!$auth->isCreate($transacao)){
			Util::info(Config::AUTH_MESSAGE);
			return true;
		}
		$queryGruposDisponiveis = query('select ci_grupo, nm_grupo from tethys.tb_grupo where cd_modulo = '.$modulo.' order by fl_nivel_acesso desc');
		$queryGruposUtilizados = null;
	}
	else{
		if(!$auth->isUpdate($transacao)){
			Util::info(Config::AUTH_MESSAGE);
			return true;
		}
		if(@!$rowEdit){
			$rowEdit = query("select tu.*, to_char(dt_nascimento, 'dd/mm/yyyy') as dt_nascimento
			from tethys.tb_usuario tu
			where tu.ci_usuario = ".$_GET['form'])->fetch();
		}
		$queryGruposDisponiveis = query('select ci_grupo, nm_grupo from tethys.tb_grupo where cd_modulo = '.$modulo.' and ci_grupo not in(select cd_grupo from tethys.tb_usuariogrupos where cd_usuario = '.$_GET['form'].') order by fl_nivel_acesso desc');
		$queryGruposUtilizados = query('select tg.ci_grupo, tg.nm_grupo from tethys.tb_usuariogrupos tug join tethys.tb_grupo tg on(tug.cd_grupo = tg.ci_grupo) where tg.cd_modulo = '.$modulo.' and tug.cd_usuario = '.$_GET['form']);
	}
}
else{ //Consulta no banco para listagem dos registros
	$where = '';
	if(@$_POST['search1']){
		$term = addslashes($_POST['search1']);
		$where .= "and nm_usuario ilike '%{$term}%' ";
	}
	if(@$_POST['search2']){
		$term = addslashes($_POST['search2']);
		$where .= "and nm_login ilike '%{$term}%' ";
	}
	if(@$_POST['search3']){
		$term = addslashes($_POST['search3']);
		$where .= "and ds_email ilike '%{$term}%' ";
	}
	if(@$_POST['search3']){
		$term = addslashes($_POST['search3']);
		$where .= "and ds_email ilike '%{$term}%' ";
	}
	if(@$_POST['search4']){
		$term = addslashes($_POST['search4']);
		$term = preg_replace("/[^0-9]/", "", $term);
		$where .= "and nm_cpf ilike '%{$term}%' ";
	}

	$sql = "select 	ci_usuario,
		nm_usuario,
		nm_login,
		nm_cpf,
		ds_email,
		to_char(dt_nascimento, 'dd/mm/yyyy') as dt_nascimento,
		fl_sexo
	from tethys.tb_usuario
	where 1=1 $where
	order by 2
	limit {$limitPagina} offset ".(($p - 1) * $limitPagina);
	$query = query($sql);
	$sqlNum = "select count(*) as num from tethys.tb_usuario where 1=1 $where";
	$rowNum = query($sqlNum)->fetch();
	$registros = $rowNum['num'];
	$paginacao = Util::pagination($registros, 4);
}

//Mascara CPF para Listar.
function mask($val, $mask){
	if(strlen($val) == 14)
	return $val;

	$maskared = '';
	$k = 0;
	for($i = 0; $i<=strlen($mask)-1; $i++){
		if($mask[$i] == '#'){
			if(isset($val[$k]))
			$maskared .= $val[$k++];
		}else{
			if(isset($mask[$i]))
			$maskared .= $mask[$i];
		}
	}
	return $maskared;
}

//Deixando pré-selecinada a opção masculino
if(@!$rowEdit['fl_sexo'])
$rowEdit['fl_sexo'] = 'M';

?>
?>

<h3>
	<i class="fa fa-users"></i> Usuários -
	<?php echo (!isset($_GET['form']) ? 'Pesquisa' : (@$_GET['form'] > 0 ? 'Edição' : 'Cadastro')); ?>
</h3>
	<?php if(!isset($_GET['form'])){ ?>
<a href="<?php echo Util::setLink(array('&form=0')); ?>"
	class="command-page"><span class="fa fa-plus-square"></span> Novo</a>
	<?php } else{ ?>
<a href="#" class="command-page"
	onclick="window.location='?page=acesso/usuario';"><span
	class="fa fa-reply"></span> Voltar</a>
	<?php } ?>

<div class="panel panel-default">
	<div class="panel-body">
	<?php echo Util::$alert; ?>
	<?php if(!isset($_GET['form'])){ ?>
		<form action="<?php echo Util::setLink(array('p=null')); ?>"
			method="post" class="form" role="form">
			<div class="row">
				<div class="col-md-6">
					<div class="form-group">
						<label class="control-label">Nome:</label> <input type="text"
							name="search1" id="search1"
							value="<?php echo @$_POST['search1']; ?>" class="form-control" />
					</div>
					<div class="form-group">
						<label class="control-label">E-mail:</label> <input type="text"
							id="search3" name="search3"
							value="<?php echo @$_POST['search3']; ?>" class="form-control"
							maxlength="100" />
					</div>
				</div>
				<div class="col-md-6">
					<div class="form-group">
						<label class="control-label">Login:</label> <input type="text"
							id="search2" name="search2"
							value="<?php echo @$_POST['search2']; ?>" maxlength="50"
							class="form-control" />
					</div>

					<div class="form-group">
						<label class="control-label">CPF:</label> <input type="text"
							id="search4" name="search4"
							value="<?php echo @$_POST['search4']; ?>"
							onkeypress="mask(this, cpf)" maxlength="14" class="form-control" />
					</div>
				</div>
				<div class="col-md-6">
					<div class="form-group">
						<button id="btSearch" class="btn btn-success">
							<span class="fa fa-search"></span> Consultar
						</button>
					</div>
				</div>
			</div>
		</form>
		<?php } ?>

		<?php if(!isset($_GET['form'])){ ?>

		<!-- LISTAGEM DOS REGISTROS -->

		<div class="table-responsive">
			<table
				class="table table-striped table-bordered table-hover table-condensed">
				<thead>
					<tr class="ui-widget-header">
						<th>Cód.</th>
						<th>Usuário</th>
						<th>Login</th>
						<th>CPF</th>
						<th>Email</th>
						<th>Nascimento</th>
						<th>Sexo</th>
						<th></th>
					</tr>
				</thead>
				<tbody>
				<?php
				while($row = $query->fetch()){
					($row['fl_sexo']==0)? $sexo = 'M': $sexo = 'F';
					$arrayDatas = explode(" ", $row['dt_nascimento']);
					echo '<tr>
		            	<td>'.$row['ci_usuario'].'</td>
		                <td>'.$row['nm_usuario'].'</td>
		                <td>'.$row['nm_login'].'</td>
		                <td>'.mask($row['nm_cpf'], '###.###.###-##').'</td>
		                <td>'.$row['ds_email'].'</td>
		                <td>'.$arrayDatas[0].'</td>
		                <td>'.$sexo.'</td>
		                <td width="30" align="center">
		                	<button onclick="window.location=\''.Util::setLink(array('form='.$row['ci_usuario'])).'\';" class="btn btn-default btn-xs" title="Editar" data-toggle="tooltip">
						    	<span class="fa fa-pencil"></span>
						    </button>
		                </td>
		        	</tr>';					
				}
				?>
				</tbody>
			</table>
		</div>
		<?php echo $paginacao; ?>





		<?php } else{ ?>

		<!-- FORMULÁRIO DE CADASTRO -->
		<form action="<?php echo Util::setLink(array('db=1')); ?>"
			method="post" class="form" id="formInsertEdit" role="form"
			onsubmit="return test()">
			<div class="row">
				<div class="col-md-2">
					<label>INEP:<span class="text-danger">*</span> </label>
					<div class="input-group">
						<input type="text" id="nm_unidade_trabalho"
							name="nm_unidade_trabalho" autocomplete="off"
							class="form-control typeahead" /> <span class="input-group-btn">
							<button id="cod_unid" class="btn btn-default" type="button">
								<i class="fa fa-search"></i>
							</button> </span>
					</div>
				</div>
				<div class="col-md-4">
					<div class="form-group" id="unidade-trab">
						<label>Unidade de Trabalho:<span class="text-danger">*</span> </label>
						<div class="input-group">

							<input type="text" id="nm_unidade_trabalho"
								name="nm_unidade_trabalho" autocomplete="off"
								class="form-control typeahead" maxlength="90"
								value="<?php echo @$rowEdit['nm_unidade_trabalho'] ?>"
								<?php if(null !==@$rowEdit['nm_unidade_trabalho']) echo "disabled"; ?> />
							<input type="hidden" id="nm_unidade_trabalho_id"
								name="nm_unidade_trabalho_id"
								value="<?php echo @$rowEdit['nm_unidade_trabalho_id']?>" /> <span
								class="input-group-btn">
								<button id="edit-unidade" class="btn btn-default"
								<?php if(null ===@$rowEdit['nm_unidade_trabalho']) echo "disabled"; ?>
									type="button">
									<i class="fa fa-pencil-square-o"></i>
								</button> </span>
						</div>
					</div>
				</div>
				<div class="col-md-6">
					<div class="form-group">
						<label>Nome Completo:<span class="text-danger">*</span> </label> <input
							type="text" id="nm_usuario" name="nm_usuario"
							value="<?php echo @$rowEdit['nm_usuario']; ?>"
							class="form-control" size="50" maxlength="90" />
					</div>
				</div>
				<div class="col-md-6">
					<div class="form-group">
						<label>Login:<span class="text-danger">*</span> </label> <input
							type="text" id="nm_login" name="nm_login"
							value="<?php echo @$rowEdit['nm_login']; ?>" class="form-control"
							size="20" maxlength="50" />
					</div>
				</div>
				<div class="col-md-6">
					<div class="form-group">
						<label>CPF:<span class="text-danger">*</span> </label> <input
							type="text" id="nm_cpf" name="nm_cpf" maxlength="14"
							value="<?php echo (@$rowEdit['nm_cpf'] ? mask($rowEdit['nm_cpf'], '###.###.###-##') : ''); ?>"
							class="form-control" size="20" onkeypress="mask(this, cpf)" />
					</div>
				</div>
				<div class="col-md-6">
					<div class="form-group">
						<label>Email:<span class="text-danger">*</span> </label> <input
							type="text" id="ds_email" name="ds_email"
							value="<?php echo strtolower(@$rowEdit['ds_email']); ?>"
							class="form-control" size="50" maxlength="100" />
					</div>
				</div>
				<div class="col-md-6">
					<div class="form-group">
						<label>Data de Nascimento:<span class="text-danger">*</span> </label>
						<div class="input-group datetimepicker">
							<input type="text" id="dt_nascimento" name="dt_nascimento"
								value="<?php echo @$rowEdit['dt_nascimento']; ?>"
								onkeypress="mask(this, data)" class="form-control"
								maxlength="10" /> <span
								class="input-group-addon btn btn-default"> <span
								class="fa fa-calendar"></span> </span>
						</div>
					</div>
				</div>
				<div class="col-md-6">
					<div class="form-group">
						<label>Sexo:<span class="text-danger">*</span> </label> <label><input
							type="radio" name="fl_sexo" value="0"
							<?php echo (@$rowEdit['fl_sexo'] == 0 ? 'checked="checked"' : ''); ?> />Masculino</label>&nbsp;
						<label><input type="radio" name="fl_sexo" value="1"
						<?php echo (@$rowEdit['fl_sexo'] == 1 ? 'checked="checked"' : ''); ?> />Feminino</label>
					</div>
				</div>
				<div class="col-md-12">
					<div class="form-group">
						<label>Grupos:<span class="text-danger">*</span> </label>
						<div class="selectPicker row">
							<div class="col-md-6" style="display: inline-block; float: left">
								<label>Disponíveis</label> <select size="8" class="form-control"
									multiple>
									<?php
									if(@$queryGruposDisponiveis){
										while($row = $queryGruposDisponiveis->fetch()){
											echo '<option value="'.$row['ci_grupo'].'">'.$row['nm_grupo'].'</option>';
										}
									} ?>
								</select>
								<div class="buttons text-center col-md-12"
									style="display: inline-block; margin-top: 6px">
									<button type="button" id="add-one"
										class="btn btn-default btn-xs">
										<i class="fa fa-chevron-right"></i>
									</button>
									<button type="button" id="add-all"
										class="btn btn-default btn-xs">
										<i class="fa fa-forward"></i>
									</button>
								</div>
							</div>

							<div class="col-md-6" style="display: inline-block; float: left">
								<label>Vinculados</label> <select name="cd_grupo_select[]"
									size="8" class="form-control" multiple>
									<?php
									if(@$queryGruposUtilizados){
										while($row = $queryGruposUtilizados->fetch()){
											echo '<option value="'.$row['ci_grupo'].'">'.$row['nm_grupo'].'</option>';
										}
									} ?>
								</select>
								<div class="buttons text-center col-md-12"
									style="display: inline-block; margin-top: 6px">
									<button type="button" id="remove-one"
										class="btn btn-default btn-xs">
										<i class="fa fa-chevron-left"></i>
									</button>
									<button type="button" id="remove-all"
										class="btn btn-default btn-xs">
										<i class="fa fa-backward"></i>
									</button>
								</div>
							</div>

						</div>
					</div>
				</div>
				<div class="form-group">
					<div class="col-md-8">
						<button id="btInsertEdit" type="button" onclick="validate()"
							class="btn btn-success" role="button" aria-disabled="false">
							<span class="fa fa-save"></span> Salvar
						</button>
					</div>
				</div>
			</div>
		</form>
		<?php } ?>
	</div>
</div>





<script>
$(function(){
	$(".selectPicker").selectPicker();
	$('.datetimepicker').datetimepicker({pickTime:false,language:'pt-br'});
	$('#edit-unidade').click(function(){
	    $(this).prop('disabled', true);
    	$('#unidade-trab').find('input:eq(0)').prop('disabled', false).val('');
    	$('#unidade-trab').find('input:eq(1)').val('');
    	//$('#cod_unid').text('INEP');
    });
	$('#cod_unid').click(function(){
		console.log(dados);
		$('#nm_unidade_trabalho').val(dados.label);
	})
});

function validate(){
	var erro = false;
	$('input, select, textarea').each(function(){
		$(this).parent().addClass('has-error has-feedback');
		if(!erro) $(this).focus();
		erro = true;
	});
	
}

var dados;
$('#nm_unidade_trabalho').typeahead({
	source: function (query, process) {
	    unidades = [];
	    map = {};
	    $.get(
			'partials/unidade_trabalho_json.php',
			{'term':$('#nm_unidade_trabalho').val()},
	    	function(data){
				dados = data[0];
	    		$.each(data, function (i, unidade) {
	    			map[unidade.label] = unidade;
	    		    unidades.push(unidade.label);
				});
	    		process(unidades);
	    	},'json'
	    );
	}, 
	updater: function (item) {		
		console.log(map[item]);
	    selectedId = map[item].id;
	    SelectedInep = map[item].inep;
	    $('#cod_unid').text(SelectedInep);
	    $('#nm_unidade_trabalho_id').val(selectedId);
	    $('#unidade-trab').find('input:eq(0)').prop('disabled', true);
	    $('#edit-unidade').prop('disabled', false);
	    return item;
	}
});


function test(){
	$('select[name="cd_grupo_select[]"] option').prop('selected', true);
	var valid = true;
	$("#formInsertEdit").find("input,select").each(function(index){
		$(this).removeClass("ui-state-error");				
	});	
	if($('#nm_unidade_trabalho').val().length == 0 || $('#nm_unidade_trabalho_id').val() == 0){
		valid = false;
		$('#nm_unidade_trabalho').addClass("ui-state-error").focus();
		updateTips('Selecione corretamente uma Unidade de Trabalho.');
	}	
	valid = checkLength('nm_usuario', 'Nome Completo', 3) && valid;
	valid = checkLength('nm_login', 'Login', 3) && valid;
	if(!checkCpf($('#nm_cpf').val())){
		valid = false;
		$('#nm_cpf').addClass("ui-state-error").focus();			
		updateTips('CPF inválido.');
	}
	if(!checkMail($('#ds_email').val())){
		valid = false;
		$('#ds_email').addClass("ui-state-error").focus();			
		updateTips('Email inválido.');
	}
	if(!checkData($('#dt_nascimento').val())){
		valid = false;
		$('#dt_nascimento').addClass("ui-state-error").focus();			
		updateTips('Data de Nascimento inválida.');
	}
	
	return valid;
}

$.fn.selectPicker = function(params){
	var component = $(this);
	var firstSelect = component.find('select:eq(0)');
	var fromOptions = firstSelect.find('option');
	var secondSelect = component.find('select:eq(1)');
	var toOptions = secondSelect.find('option');
	
	var addOne = component.find('button:eq(0)');
	var addAll = component.find('button:eq(1)');
	var removeOne = component.find('button:eq(2)');
	var removeAll = component.find('button:eq(3)');
	
	$('.buttons').find('button').css('width', '40px');

	addOne.click(function(){
		var selecionados = firstSelect.find('option:selected');
		selecionados.each(function() {
			secondSelect.append($(this));
			$(this).attr("selected", false);			
		});
		//ordena(secondSelect);
	});
	
	addAll.click(function(){
		fromOptions = firstSelect.find('option');
		fromOptions.each(function() {
			secondSelect.append($(this));
			$(this).attr("selected", false);
		});
   		firstSelect.html('');
		//ordena(secondSelect);
	});
	
	removeOne.click(function(){
		var selecionados = secondSelect.find('option:selected');
		selecionados.each(function() {
			firstSelect.append($(this));
			$(this).attr("selected", false);   			
		});
		//ordena(firstSelect);		
	});
	
	removeAll.click(function(){
		toOptions = secondSelect.find('option');
		toOptions.each(function() {
			firstSelect.append($(this));
			$(this).attr("selected", false);
		});
		//ordena(firstSelect);
	});

	//Verifica se o elemento ja existe na lista passada
   	function jaExiste(elemento, listaPara){
   		var retorno = false;
		$(listaPara).each(function(){
			if(elemento.val() == $(this).val()){
				retorno = true;
			}
		});
		return retorno;
   	}

   	//Ordena os options de um select
   	function ordena(elemento){
   		var options = elemento.find('option');
		var arr = options.map(function(_, o) { return { t: $(o).text(), v: o.value }; }).get();
		arr.sort(function(o1, o2) { return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0; });
		options.each(function(i, o) {
		  o.value = arr[i].v;
		  $(o).text(arr[i].t);
		});
   	}	
};

</script>
